package cn.chaohi.utils;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.MessageDigest;

/**
 * 文件存储相关
 * @author W
 * @date 2016年2月2日 上午11:35:36 
 *
 */
public class FileUtils {
    /**
     * 新建文件夹
     * @param filePath
     * @author Austerlitz
     *     2015年4月9日下午6:23:32
     */
    public static void makeDirectory(String filePath) {  
        try {
            File file  = new File(filePath);
            if (!file.exists()) {  
                file.mkdir();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();
        }  
    }
    /**
     * 新建文件
     * @param filePath
     * @author Austerlitz
     *     2015年4月9日下午6:23:32
     */
    public static File makeFile(String filePath) {  
        try {  
            String path = filePath.substring(0,filePath.lastIndexOf("/"));
            makeDirectory(path);
            File file = new File(filePath);  
            file.createNewFile();
            return file;
        } catch (Exception e) {  
            e.printStackTrace();
            return null;
        }  
    }
  
    /**
     * 删除文件/文件夹
     * @param file  
     * @author W 
     * @date 2016年3月7日 下午1:55:26
     */
    private static void deleteFile(File file) {
        if(file==null){
            return;
        }
        if (file.exists()) { // 判断文件是否存在
            if (file.isFile()) { // 判断是否是文件
                file.delete(); // delete()方法 你应该知道 是删除的意思;
            } else if (file.isDirectory()) { // 否则如果它是一个目录
                File files[] = file.listFiles(); // 声明目录下所有的文件 files[];
                for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
                    deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
                }
            }
            file.delete();
        }
    }
    /**
     * 删除文件/文件夹
     * @param path
     * @author W 
     * @date 2016年3月7日 下午1:55:26
     */
    public static void deleteFile(String path) {
        File file = new File(path);
        deleteFile(file);
    }



    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[1024];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer, 0, 1024)) != -1) {
                digest.update(buffer, 0, len);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return bytesToHexString(digest.digest());
    }

    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
    
    public static void main(String [] args) {
    	String xx = getFileMD5(new File("C:/Users/mayn/Desktop/version upgrade/patch/630.apk"));
    	System.out.println(xx);
    }

}
